package com.行为型模型.V备忘录模式.blackBox;


/**
 * 定义发起人类 GameRole ，并在内部定义备忘录内部类 RoleStateMemento （该内部类设置为私有 的）
 */
public class GameRole {

    private int vit; //生命力    
    private int atk; //攻击力  
    private int def; //防御力
 //初始化状态    
    public void initState() {
        this.vit = 100;
        this.atk = 100;
        this.def = 100;
    }
    //战斗    
    public void fight() {
        this.vit = 0;
        this.atk = 0;
        this.def = 0;
    }
    //保存角色状态
    public RoleStateMemento saveState(){
        return new RoleStateMemento(vit,atk,def);
    }


    //恢复角色状态
    public void recoverState(Memento memento){
        RoleStateMemento roleStateMemento=(RoleStateMemento) memento;
        this.vit=roleStateMemento.getVit();
        this.atk=roleStateMemento.getAtk();
        this.def=roleStateMemento.getDef();
    }

    public void stateDisplay(){
        System.out.println("角色生命力：" + vit);
        System.out.println("角色攻击力：" + atk);
        System.out.println("角色防御力：" + def);
    }

    //私有备忘录实体 禁止外界访问
    private class RoleStateMemento  implements Memento{

        private int vit; //生命力    
        private int atk; //攻击力  
        private int def; //防御力

        public RoleStateMemento(int vit, int atk, int def) {
            this.vit = vit;
            this.atk = atk;
            this.def = def;
        }

        public int getVit() {
            return vit;
        }

        public void setVit(int vit) {
            this.vit = vit;
        }

        public int getAtk() {
            return atk;
        }

        public void setAtk(int atk) {
            this.atk = atk;
        }

        public int getDef() {
            return def;
        }

        public void setDef(int def) {
            this.def = def;
        }
    }

}
